import request from '@/config/axios'
import type { Dayjs } from 'dayjs';

/** 端口信息 */
export interface Ports {
          portId: number; // ID
          deviceId?: number; // 设备ID
          portDescrType: string; // 端口描述类型
          portDescrDescr: string; // 端口描述详情
          portDescrCircuit: string; // 端口描述电路信息
          portDescrSpeed: string; // 端口描述速度
          portDescrNotes: string; // 端口描述备注
          ifDescr: string; // 接口描述
          ifName: string; // 网络接口名称
          portName: string; // 端口名称
          ifIndex: number; // 接口索引
          ifSpeed: number; // 接口速度
          ifspeedPrev: number; // 上一次接口速度
          ifConnectorPresent: string; // 接口连接器是否存在
          ifOperStatus: string; // 接口操作状态
          ifoperstatusPrev: string; // 接口上一次操作状态
          ifAdminStatus: string; // 接口管理状态
          ifadminstatusPrev: string; // 接口上一次管理状态
          ifDuplex: string; // 接口双工模式
          ifMtu: number; // 接口最大传输单元
          ifType: string; // 接口类型
          ifAlias: string; // 接口别名
          ifPhysAddress: string; // 接口物理地址
          ifLastChange?: number; // 接口最后更改时间
          ifVlan: string; // 接口 VLAN 信息
          ifTrunk: string; // 接口链路聚合信息
          ifVrf?: number; // 接口虚拟路由转发信息
          ignore?: boolean; // 是否忽略标识
          disabled?: boolean; // 是否禁用标识
          pagpOperationMode: string; // PAgP 操作模式
          pagpPortState: string; // PAgP 端口状态
          pagpPartnerDeviceId: string; // PAgP 对端设备 ID
          pagpPartnerLearnMethod: string; // PAgP 对端学习方法
          pagpPartnerIfIndex: number; // PAgP 对端接口索引
          pagpPartnerGroupIfIndex: number; // PAgP 对端组接口索引
          pagpPartnerDeviceName: string; // PAgP 对端设备名称
          pagpEthcOperationMode: string; // PAgP 以太网通道操作模式
          pagpDeviceId: string; // PAgP 设备 ID
          pagpGroupIfIndex: number; // PAgP 组接口索引
          ifInUcastPkts: number; // 入站单播数据包数量
          ifinucastpktsPrev: number; // 上一次入站单播数据包数量
          ifinucastpktsDelta: number; // 入站单播数据包数量差值
          ifinucastpktsRate: number; // 入站单播数据包速率
          ifOutUcastPkts: number; // 出站单播数据包数量
          ifoutucastpktsPrev: number; // 上一次出站单播数据包数量
          ifoutucastpktsDelta: number; // 出站单播数据包数量差值
          ifoutucastpktsRate: number; // 出站单播数据包速率
          ifInErrors: number; // 入站错误数据包数量
          ifinerrorsPrev: number; // 上一次入站错误数据包数量
          ifinerrorsDelta: number; // 入站错误数据包数量差值
          ifinerrorsRate: number; // 入站错误数据包速率（单位：包/秒）
          ifOutErrors: number; // 出站错误数据包数量。
          ifouterrorsPrev: number; // 上一次出站错误数据包数量。
          ifouterrorsDelta: number; // 出站错误数据包数量差值。
          ifouterrorsRate: number; // 出站错误数据包速率（单位：包/秒）。
          ifInOctets: number; // 入站字节数（流量统计）
          ifinoctetsPrev: number; // 上一次入站字节数。
          ifinoctetsDelta: number; // 入站字节数差值。
          ifinoctetsRate: number; // 入站流量速率（单位：字节/秒）。
          ifOutOctets: number; // 出站字节数。
          ifoutoctetsPrev: number; // 上一次出站字节数。
          ifoutoctetsDelta: number; // 出站字节数差值。
          ifoutoctetsRate: number; // 出站流量速率（单位：字节/秒）。
          pollTime: number; // 最后一次轮询时间（时间戳）。
          pollPrev: number; // 上一次轮询时间。
          pollPeriod: number; // 轮询间隔时间（秒）。
          isCritical: number; // 是否是关联链路0否1是
          isShow: boolean; // 是否展示0否1是
          bandwidth: number; // 实际上行带宽
          ifInLoss: number; // 入站丢包数量
          ifOutLoss: number; // 出站丢包数量
          ifInNoUnicastForward: number; // 接口非单播包转发数（in）
          ifOutNoUnicastForward: number; // 接口非单播包转发数（out）
          ifUnknownDrop: number; // 丢弃的未知协议包
  }

// 端口 API
export const PortsApi = {
  // 查询端口分页
  getPortsPage: async (params: any) => {
    return await request.get({ url: `/business/ports/page`, params })
  },

  // 查询端口详情
  getPorts: async (id: number) => {
    return await request.get({ url: `/business/ports/get?id=` + id })
  },

  // 新增端口
  createPorts: async (data: Ports) => {
    return await request.post({ url: `/business/ports/create`, data })
  },

  // 修改端口
  updatePorts: async (data: Ports) => {
    return await request.put({ url: `/business/ports/update`, data })
  },

  // 删除端口
  deletePorts: async (id: number) => {
    return await request.delete({ url: `/business/ports/delete?id=` + id })
  },

  /** 批量删除端口 */
  deletePortsList: async (ids: number[]) => {
    return await request.delete({ url: `/business/ports/delete-list?ids=${ids.join(',')}` })
  },

  // 导出端口 Excel
  exportPorts: async (params) => {
    return await request.download({ url: `/business/ports/export-excel`, params })
  },
}